/*Version 1.0*/
#include <assert.h>
#include "Plume.h"

/*Precondition : Plume non initialisee                                                                                               
  Postcondition : Plume initialisee*/
void InitPlume(Plume *p)
{
  p->coorPl.x=0;
  p->coorPl.y=0;

  p->contour.r=0;
  p->contour.g=0;
  p->contour.b=0;

  p->fond.r=0;
  p->fond.g=0;
  p->fond.b=0;

  p->dimX=0;
  p->dimY=0;
  p->epaisseur_contour=0;
  
  p->tab_coordonnees=g_array_new(FALSE,FALSE,sizeof(Coordonnees));
}

/*Precondition : Plume initialisee*/
void CreerPlume(Plume *p,double epaisseur_contour,double dimX,double dimY,Coordonnees c,Couleur contour,Couleur fond)
{
  assert(dimX >= 0 && dimY >= 0 && epaisseur_contour >=0);
  assert(c.x>=0 && c.y>=0);
  
  p->coorPl.x=c.x;
  p->coorPl.y=c.y;

  p->contour.r=contour.r;
  p->contour.g=contour.g;
  p->contour.b=contour.b;

  p->fond.r=fond.r;
  p->fond.g=fond.g;
  p->fond.b=fond.b;
  
  p->dimX=dimX;
  p->dimY=dimY;

  p->epaisseur_contour=epaisseur_contour;
}


/*Precondition : Plume initialisee*/
void ModifierFondPlume(Plume *p,Couleur fond)
{
  p->fond.r=fond.r;
  p->fond.g=fond.g;
  p->fond.b=fond.b;
}

/*Precondition : Plume initialisee, dimX et dimY >=0*/
void ModifierTaillePlume(Plume *p,unsigned int dimX,unsigned int dimY)
{
  assert(dimX >= 0 && dimY >= 0);
  p->dimX=dimX;
  p->dimY=dimY;
}

/*Precondition : Plume initialisee, epaisseur_contour >=0)*/
void ModifierContourPlume(Plume *p,Couleur contour,unsigned int epaisseur_contour)
{
  assert(epaisseur_contour>=0);
  p->contour.r=contour.r;
  p->contour.g=contour.g;
  p->contour.b=contour.b;

  p->epaisseur_contour=epaisseur_contour;
}
/*Precondition : Plume initialisee*/
void ModifierCoordonneesPlume(Plume *p,Coordonnees c)
{
  assert(c.x>=0 && c.y>=0);
  p->coorPl.x=c.x;
  p->coorPl.y=c.y;
}

/*Precondition : Plume initialisee*/
/*Postcondition : une coordonnees est rajoutee dans le tab de coordonnees
en fin de tableau*/
void RajouterPointEncrage(Plume *p,Coordonnees c)
{
  g_array_append_val(p->tab_coordonnees,c);
}

/*Precondition : Plume initialisee i <=taille utilise du tableau de coordonnees*/
void ModifPointEncrage(Plume *p,unsigned int i,Coordonnees c)
{
  g_array_remove_index(p->tab_coordonnees,i); 
  g_array_insert_val(p->tab_coordonnees,i,c);
}
/*Precondition : Plume initialisee, i <=taille utilisee du tableau de coordonnees*/
void SuppPointEncrage(Plume *p,unsigned int i)
{
  g_array_remove_index(p->tab_coordonnees,i);
}

/*Precondition : Plume initialisee
Postcondition : La Plume ne peut plus etre utilisee
la memoire alloue pour le tableau est supprimee*/
void SupprimerPlume(Plume *p)
{
  
  p->coorPl.x=0;
  p->coorPl.y=0;

  p->contour.r=0;
  p->contour.g=0;
  p->contour.b=0;

  p->fond.r=0;
  p->fond.g=0;
  p->fond.b=0;

  p->dimX=0;
  p->dimY=0;
  p->epaisseur_contour=0;

  g_array_free(p->tab_coordonnees,FALSE);
}
